package br.com.webhomesites.locacao.presenter;

import br.com.webhomesites.locacao.contracts.IDevolucaoTotComPagView;
import br.com.webhomesites.locacao.model.DevolucaoBO;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.FocusEvent;
import java.awt.event.FocusListener;
import java.text.DecimalFormat;

public class DevolucaoTotComPagPresenterActionListeners {

    static class ConfirmarActionListener implements ActionListener {

        private DevolucaoTotComPagPresenter presenter;

        public ConfirmarActionListener(DevolucaoTotComPagPresenter presenter) {
            this.presenter = presenter;
        }

        @Override
        public void actionPerformed(ActionEvent evt) {
            presenter.setOperacao(presenter.CONFIRMAR_STRATEGY);
            presenter.getOperacao().execute();
            presenter.habilitarEdicao(true);

            IDevolucaoTotComPagView view = (IDevolucaoTotComPagView) presenter.getView();

            view.enableBtnConfirmar(false);
            view.enableBtnRecibo(true);
            view.enableBtnCancelar(false);

        }
    }

    static class CancelarActionListener implements ActionListener {

        private DevolucaoTotComPagPresenter presenter;

        public CancelarActionListener(DevolucaoTotComPagPresenter presenter) {
            this.presenter = presenter;
        }

        @Override
        public void actionPerformed(ActionEvent evt) {
            presenter.setOperacao(presenter.CONFIRMAR_STRATEGY);
            presenter.habilitarEdicao(true);

            IDevolucaoTotComPagView view = (IDevolucaoTotComPagView) presenter.getView();

        }
    }

    static class ReciboActionListener implements ActionListener {

        private DevolucaoTotComPagPresenter presenter;

        public ReciboActionListener(DevolucaoTotComPagPresenter presenter) {
            this.presenter = presenter;
        }

        @Override
        public void actionPerformed(ActionEvent evt) {
            presenter.setOperacao(presenter.CONFIRMAR_STRATEGY);
            presenter.habilitarEdicao(true);

            IDevolucaoTotComPagView view = (IDevolucaoTotComPagView) presenter.getView();

        }
    }

    static class EnterListener implements ActionListener {

        private DevolucaoTotComPagPresenter devolucaoTotComPagPresenter;
        DecimalFormat df = new DecimalFormat("###,###,##0.00");
        DecimalFormat dfpercent = new DecimalFormat("##0.00");
        String tipoDesconto;

        public EnterListener(DevolucaoTotComPagPresenter devolucaoTotComPagPresenter) {
            this.devolucaoTotComPagPresenter = devolucaoTotComPagPresenter;
        }

        @Override
        public void actionPerformed(ActionEvent evt) {
            if (evt.getSource() == devolucaoTotComPagPresenter.getView().getTxtValorDescValor()) {

                DevolucaoBO devolucaoBO = new DevolucaoBO();

                tipoDesconto = "valor";
                double valorPagar = devolucaoBO.calcularValorPagar(devolucaoTotComPagPresenter.getView().getValorTotalLocacao(), devolucaoTotComPagPresenter.getView().getValorDescontoValor(), devolucaoTotComPagPresenter.getView().getValorDescontoPorcentagem(), tipoDesconto);

                devolucaoTotComPagPresenter.getView().setValorDescontoPorcentagem(dfpercent.format(devolucaoBO.calcularPorcentagemDesconto(devolucaoTotComPagPresenter.getView().getValorTotalLocacao(), valorPagar)));
                
                devolucaoTotComPagPresenter.getView().setValorDescontoValor(df.format((devolucaoTotComPagPresenter.getView().getValorDescontoValor())));
                devolucaoTotComPagPresenter.getView().setValorTotalPagar(df.format(valorPagar));
                devolucaoTotComPagPresenter.getView().setBtnConfirmarRequestFocus(true);

            } else if (evt.getSource() == devolucaoTotComPagPresenter.getView().getTxtValorDescPorcentagem()) {

                DevolucaoBO devolucaoBO = new DevolucaoBO();

                tipoDesconto = "porcento";
                double valorPagar = devolucaoBO.calcularValorPagar(devolucaoTotComPagPresenter.getView().getValorTotalLocacao(), devolucaoTotComPagPresenter.getView().getValorDescontoValor(), devolucaoTotComPagPresenter.getView().getValorDescontoPorcentagem(), tipoDesconto);

                devolucaoTotComPagPresenter.getView().setValorDescontoPorcentagem(dfpercent.format(devolucaoTotComPagPresenter.getView().getValorDescontoPorcentagem()));
                devolucaoTotComPagPresenter.getView().setValorDescontoValor(df.format(devolucaoBO.calcularValorDesconto(devolucaoTotComPagPresenter.getView().getValorTotalLocacao(), valorPagar)));
                devolucaoTotComPagPresenter.getView().setValorTotalPagar(df.format(valorPagar));
                devolucaoTotComPagPresenter.getView().setBtnConfirmarRequestFocus(true);

            }
        }
    }

    static class LostFocusListener implements FocusListener {

        private DevolucaoTotComPagPresenter devolucaoTotComPagPresenter;
        DecimalFormat df = new DecimalFormat("###,###,##0.00");
        DecimalFormat dfpercent = new DecimalFormat("##0.00");
        String tipoDesconto;

        public LostFocusListener(DevolucaoTotComPagPresenter devolucaoTotComPagPresenter) {
            this.devolucaoTotComPagPresenter = devolucaoTotComPagPresenter;
        }

        @Override
        public void focusGained(FocusEvent e) {
            if(e.getSource()==devolucaoTotComPagPresenter.getView().getTxtValorDescPorcentagem()) {
                devolucaoTotComPagPresenter.getView().getTxtValorDescPorcentagem().selectAll();
            }
        }

        @Override
        public void focusLost(FocusEvent evt) {

            if (evt.getSource() == devolucaoTotComPagPresenter.getView().getTxtValorDescValor()) {

                DevolucaoBO devolucaoBO = new DevolucaoBO();

                tipoDesconto = "valor";
                double valorPagar = devolucaoBO.calcularValorPagar(devolucaoTotComPagPresenter.getView().getValorTotalLocacao(), devolucaoTotComPagPresenter.getView().getValorDescontoValor(), devolucaoTotComPagPresenter.getView().getValorDescontoPorcentagem(), tipoDesconto);
                System.out.println("Passando na fonte valor do lost");
                devolucaoTotComPagPresenter.getView().setValorDescontoPorcentagem(dfpercent.format(devolucaoBO.calcularPorcentagemDesconto(devolucaoTotComPagPresenter.getView().getValorTotalLocacao(), valorPagar)));
                devolucaoTotComPagPresenter.getView().setValorDescontoValor(df.format((devolucaoTotComPagPresenter.getView().getValorDescontoValor())));
                devolucaoTotComPagPresenter.getView().setValorTotalPagar(df.format(valorPagar));
                
            } else if (evt.getSource() == devolucaoTotComPagPresenter.getView().getTxtValorDescPorcentagem()) {

                DevolucaoBO devolucaoBO = new DevolucaoBO();

                tipoDesconto = "porcento";
                double valorPagar = devolucaoBO.calcularValorPagar(devolucaoTotComPagPresenter.getView().getValorTotalLocacao(), devolucaoTotComPagPresenter.getView().getValorDescontoValor(), devolucaoTotComPagPresenter.getView().getValorDescontoPorcentagem(), tipoDesconto);
                System.out.println("Passando na fonte porcento do lost");
                devolucaoTotComPagPresenter.getView().setValorDescontoPorcentagem(dfpercent.format(devolucaoTotComPagPresenter.getView().getValorDescontoPorcentagem()));
                devolucaoTotComPagPresenter.getView().setValorDescontoValor(df.format(devolucaoBO.calcularValorDesconto(devolucaoTotComPagPresenter.getView().getValorTotalLocacao(), valorPagar)));
                devolucaoTotComPagPresenter.getView().setValorTotalPagar(df.format(valorPagar));
                
            }

        }
    }
}
